package com.ucode.crm.mapper;

import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ucode.crm.mode.Customer;

/**
 * 客户Mapper
 * @author: liliang
 * @date: 2020年1月31日 下午5:02:26
 */
public interface CustomerMapper {

    /**
     * 添加
     * @author liliang
     * @date 2020年1月31日
     * @param customer
     * @return
     */
    public int insert(Customer customer);
    /**
     * 更新
     * @author liliang
     * @date 2020年1月31日
     * @param customer
     * @return
     */
    public int update(Customer customer);
    /**
     * 更新协作人
     * @author liliang
     * @date 2020年5月14日
     * @param id
     * @param id
     * @return collaborator
     */
    public int updateCollaborator(@Param("id")Long id, @Param("collaborator")String collaborator);
    /**
     * 增量更新跟进次数
     * @author liliang
     * @date 2020年1月31日
     * @param id 主键
     * @param delta 步长,可正数可负数
     * @param oldFollowCount 更新前值
     * @return
     */
    public int incrFollowCount(@Param("id")Long id, @Param("delta")int delta,@Param("oldFollowCount")Integer oldFollowCount);
    /**
     * 增量更新成交次数
     * @author liliang
     * @date 2020年1月31日
     * @param id 主键
     * @param delta 步长,可正数可负数
     * @param oldDealCount 更新前值
     * @return
     */
    public int incrDealCount(@Param("id")Long id, @Param("delta")int delta,@Param("oldDealCount")Integer oldDealCount);
    /**
     * 增量更新商机数
     * @author liliang
     * @date 2020年1月31日
     * @param id 主键
     * @param delta 步长,可正数可负数
     * @param oldBusinessCount 更新前值
     * @return
     */
    public int incrBusinessCount(@Param("id")Long id, @Param("delta")int delta,@Param("oldBusinessCount")Integer oldBusinessCount);
    /**
     * 非公海客户批量逻辑删除,可恢复
     * @author liliang
     * @date 2020年1月31日
     * @param id
     * @return
     */
    public int deleteByLogic(Long id);
    
    /**
     * 公海客户逻辑删除(可恢复)
     * @author liliang
     * @date 2020年2月19日
     * @param id 客户id
     * @return
     */
    public int deletePoolByLogic(Long id);
    
    /**
     * 批量恢复逻辑删除的数据
     * @author liliang
     * @date 2020年1月31日
     * @param ids
     * @return
     */
    public int recover(List<Long> ids);
    /**
     * 批量删除,不可恢复
     * @author liliang
     * @date 2020年1月31日
     * @param ids
     * @return
     */
    public int delete(List<Long> ids);
    
    /**
     * 转让
     * @author liliang
     * @date 2020年1月31日
     * @param ids 客户主键
     * @param ownerUserId 负责人Id
     * @param oldOwnerUserId 旧负责人
     * @return
     */
    public int transfer(@Param("id") Long id,@Param("ownerUserId")Long ownerUserId,@Param("oldOwnerUserId")Long oldOwnerUserId);
    
    /**
     * 更新锁定状态
     * @author liliang
     * @date 2020年1月31日
     * @param ids 客户主键
     * @param lockStatus 锁定状态:0->解锁1->锁定
     * @return
     */
    public int updateLockStatus(@Param("id") Long id,@Param("lockStatus")Integer lockStatus);
    
    /**
     * 放入公海
     * @author liliang
     * @date 2020年1月31日
     * @param id
     * @return
     */
    public int putInPool(Long id);
    
    /**
     * 公海接收客户
     * @author liliang
     * @date 2020年2月18日
     * @param id
     * @param ownerUserId
     * @return
     */
    public int receive(@Param("id") Long id,@Param("ownerUserId")Long ownerUserId);
    
    /**
     * 主键查询
     * @author liliang
     * @date 2020年1月31日
     * @param id
     * @return
     */
    public Customer findById(Long id);
    /**
     * 主键批量查询
     * @author liliang
     * @date 2020年1月31日
     * @param ids
     * @return
     */
    public List<Customer> findByIds(List<Long> ids);
    
    /**
     * 根据条件查询公海客户总数
     * @author liliang
     * @date 2020年3月5日
     * @param name 客户名称(前模糊查询)
     * @param mobile 联系电话(手机号或者电话前模糊查询)
     * @param areaId 位置
     * @param level 客户级别
     * @param source 客户来源
     * @param startTime 最后跟进时间在startTime之后
     * @param endTime 最后跟进时间在startTime之前
     * @return
     */
    public long queryPoolCount(@Param("name")String name, @Param("mobile")String mobile, @Param("areaId")Integer areaId, @Param("level")Integer level, @Param("source")Integer source, @Param("startTime")Date startTime, @Param("endTime")Date endTime);
    
    /**
     * 根据条件分页查询公海客户
     * @author liliang
     * @date 2020年3月5日
     * @param name 客户名称(前模糊查询)
     * @param mobile 联系电话(手机号或者电话前模糊查询)
     * @param areaId 位置
     * @param level 客户级别
     * @param source 客户来源
     * @param startTime 最后跟进时间在startTime之后
     * @param endTime 最后跟进时间在startTime之前
     * @param pageSize
     * @param offset
     * @return
     */
    public List<Customer> queryPoolPage(@Param("name")String name, @Param("mobile")String mobile, @Param("areaId")Integer areaId, @Param("level")Integer level, @Param("source")Integer source, @Param("startTime")Date startTime, @Param("endTime")Date endTime,
            @Param("pageSize")int pageSize,@Param("offset")int offset);
    
}
